\documentclass{ctexart}

\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{cite}
\usepackage{tikz}
\usetikzlibrary{arrows,shapes,chains}

\title{Mandelbrot Set 的生成和探索}

\author{周游 \\ 强基数学3200106105}

\date{2022/6/30}

\begin{document}

\maketitle

\begin{abstract}
    曼德博集合(Mandelbrot set)是使复二次多项式
$f_c(z)=z^2+c$的迭代值不扩散的所有复数c的集合。它具有很好的分形性质。
本项目利用二次多项式迭代来判断c是否在曼德博集中，并绘制其图像。
\newline
\textbf{关键字:}曼德博集合、复动力系统、二次多项式迭代、分形

\end{abstract}

\section*{引言}
曼德博集合（Mandelbrot set，或译为曼德布洛特复数集合） \cite{Peitgen1992Fractals}
是一种在复平面上组成分形的点的集合，以数学家本华·曼德博的名字命名。
曼德博集合与朱利亚集合有些相似的地方，例如使用相同的复二次多项式来进行迭代。\par
将曼德博集合无限放大都能够有精妙的细节在内，而这瑰丽的图案仅仅由一个简单的公式生成。
因此有人认为曼德博集合是“人类有史以来做出的最奇异、最瑰丽的几何图形”，曾被称为“上帝的指纹”。
\begin{figure}[h]
    \centering
    \includegraphics[width=.2\textwidth]{./images/M.png}
    \caption{Mandelbrot set}
\end{figure}
\section{问题背景}
\subsection{多项式的迭代}
对于一次有理多项式的迭代：$f(z)=\frac{az+b}{cz+d},a,b,c,d\in \mathbb{C},ad-bc\neq 0$
的研究已较为完善。会产生一个不动点或两个不动点（吸引和排斥）。而二次多项式的迭代仍是前沿问题。\\
有3位数学家的菲尔兹奖工作和二次多项式的迭代有关\\
法国数学家J.Yoccoz获1994年菲尔兹奖\\
美国数学家C.McMullen获1998年菲尔兹奖\\
巴西数学家A.Avila获2014年菲尔兹奖\\
\subsection{曼德博集合}
曼德博集合(Mandelbrot set)可以用复二次多项式来定义： 
$f_c(z)=z^2+c$
其中c是一个复数参数。
从z=0开始对$f_c(z)$进行迭代：
\begin{equation*}
\begin{aligned}
z_{n+1}&=z_n^2+c,n=0,1,2...\\
z_0&=0\\
z_1&=z_0^2+c=c\\
z^2&=z_1^2+c=c^2+c\\
\end{aligned}
\end{equation*}
每次迭代的值依序如以下数列所示：
$(0,f_c(0),f_c(f_c(0)),f_c(f_c(f_c(0))),...)$
不同的参数c可能使迭代值的模逐渐发散到无限大，也可能收敛在有限的区域内。
曼德博集合M就是使其不扩散的所有复数c的集合。

\section{数学理论}
下面介绍几条关于此迭代的定理\cite{2004Fractals}\\
定理一：若$|c|\leqslant \frac{1}{4}$,则$c\in M$\\
定理二：若$|c|\in M$,则$|c|\leqslant 2$\\
定理三：若$|c|\in M$,则$|z_n|\leqslant 2,(n=1,2,...)$\\

\section{算法}
\subsection{窗口}
用Window.h管理图像窗口的原点、显示长度、单位长度等参数
\begin{verbatim}
class Window
{
private:
	Point2d origin = {0.0, 0.0};
	double dimension = 5.0;
	int height = 1080;
	int width = 1920;
    ...
}
\end{verbatim}
\subsection{迭代}
Mandelbrot.h里放了迭代操作的类和二次多项式迭代子类、以及一步迭代的算法$z^2+c$
\begin{verbatim}
class Iteration
{
protected:
	std::complex<double> iteration_point{0.0, 0.0};
	int iteration_times = 0;
	int max_iteration = 20;
	std::complex<double> iteration_const{0.0, 0.0};
	bool flag_stop = false;
	bool flag_disconvergence = false;
public:
    ...
    virtual void forward_step() = 0;
}
\end{verbatim}
Mandelbrot.cpp为生成可执行文件的主程序,输入文件名、原点坐标、长度，
通过判断每一个c是否使迭代发散，绘制出Mandelbrot set图像.\\
\begin{verbatim}
	while (!man.stop_criterion())
	{
		man.forward_step();
		if (man.is_disconvergence())
			break;
	}
\end{verbatim}

工作流程图：

\thispagestyle{empty}
% 流程图定义基本形状
\tikzstyle{startstop} = [rectangle, rounded corners, minimum width = 2cm, minimum height=1cm,text centered, draw = black]
\tikzstyle{io} = [trapezium, trapezium left angle=70, trapezium right angle=110, minimum width=2cm, minimum height=1cm, text centered, draw=black]
\tikzstyle{process} = [rectangle, minimum width=3cm, minimum height=1cm, text centered, draw=black]
\tikzstyle{decision} = [diamond, aspect = 3, text centered, draw=black]
% 箭头形式
\tikzstyle{arrow} = [->,>=stealth]
\begin{tikzpicture}[node distance=2cm]
%定义流程图具体形状
\node[startstop](start){开始};
\node[io, right of = start, xshift = 1cm](in1){输入参数};
\node[process, right of = in1, xshift = 2cm](pro1){建立window};
\node[process, below of = pro1, yshift = -0.1cm](pro2){判断每个c是否属于M};
\node[io, left of = pro2, xshift = -4cm](out1){输出bmp图像};
\node[startstop, below of = out1, yshift = -0.1cm](stop){结束};
\coordinate (point1) at (-3cm, -6cm);
%连接具体形状
\draw [arrow] (start) -- (in1);
\draw [arrow] (in1) -- (pro1);
\draw [arrow] (pro1) -- (pro2);
\draw [arrow] (pro2) -- (out1);
\draw [arrow] (out1) -- (stop);
\end{tikzpicture}

\subsection{bitmap绘制}
使用bitmap.h和bitmap.cpp使build$\_$bmp函数得以实现。

\section{数值算例}
\subsection{输入参数}
先用make命令生成test可执行文件，运行test。
输入参数不足时，会得到提示：
\begin{verbatim}
	Usage: ./test filename ox oy dimension
\end{verbatim}
\subsection{输出示例}
输入参数为 whole.bmp 0.0 0.0 2.2得到整体图像，
\begin{figure}[h]
    \centering
    \includegraphics[width=.4\textwidth]{./images/whole.bmp}
    \caption{whole}
\end{figure}
输入参数为 test.bmp 0.0 1.0 1.0得到局部图像。
\begin{figure}[h]
    \centering
    \includegraphics[width=.3\textwidth]{./images/test.bmp}
    \caption{partial}
\end{figure}

\section{结论}
Mandelbrot集具有很好的分形性质，它的局部是缩小的整体，拥有数学之美。\cite{ROCHON2000A}

\bibliographystyle{unsrt}
\bibliography{bibliography}

\end{document}
